package org.cqust.backend.dto.response.mission;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.cqust.backend.entity.mission.MissionVersion;

import java.time.LocalDateTime;

/**
 * 数据传输对象（DTO），用于表示任务版本的详细信息。
 */
@Data
public class MissionVersionDetailDTO {

    /**
     * 任务版本的唯一标识符。
     * 这个字段用于标识一个特定的任务版本。
     */
    @Schema(description = "任务版本的唯一标识符", requiredMode = Schema.RequiredMode.REQUIRED)
    private Long missionVersionId;

    /**
     * 表示该任务版本是否已废弃。
     * 如果任务版本不再使用，则此字段设置为true。
     */
    @Schema(description = "表示该任务版本是否已废弃", requiredMode = Schema.RequiredMode.REQUIRED)
    private Boolean obsolete;

    /**
     * 任务版本的标题。
     * 这个字段用于描述任务版本的简短名称。
     */
    @Schema(description = "任务版本的标题", requiredMode = Schema.RequiredMode.REQUIRED)
    private String title;

    /**
     * 任务版本的详细描述。
     * 这个字段用于提供任务版本的详细信息。
     */
    @Schema(description = "任务版本的详细描述", requiredMode = Schema.RequiredMode.REQUIRED)
    private String description;

    /**
     * 任务版本的创建时间。
     * 这个字段记录任务版本被创建的时间戳。
     */
    @Schema(description = "任务版本的创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
    private LocalDateTime createdAt;

    /**
     * 任务版本的最大得分。
     * 这个字段表示完成该任务版本可以获得的最高分数。
     */
    @Schema(description = "任务版本的最大得分", requiredMode = Schema.RequiredMode.REQUIRED)
    private Float maxScore;

    /**
     * 任务版本的持续时间。
     * 这个字段表示完成该任务版本所需的时间（以分钟为单位）。
     */
    @Schema(description = "任务版本的持续时间（分钟）", requiredMode = Schema.RequiredMode.REQUIRED)
    private Integer duration;

    /**
     * 任务版本的执行说明。
     * 这个字段提供完成任务版本的具体步骤和指导。
     */
    @Schema(description = "任务版本的执行说明", requiredMode = Schema.RequiredMode.REQUIRED)
    private String instructions;

    /**
     * 默认构造函数。
     */
    public MissionVersionDetailDTO() {
    }

    /**
     * 使用MissionVersion对象构造MissionVersionDetailDTO对象。
     *
     * @param missionVersion 任务版本对象
     */
    public MissionVersionDetailDTO(MissionVersion missionVersion) {
        setMissionVersionId(missionVersion.getId());
        setDescription(missionVersion.getDescription());
        setTitle(missionVersion.getTitle());
        setInstructions(missionVersion.getInstructions());
        setCreatedAt(missionVersion.getCreatedAt());
        setDuration(missionVersion.getDuration());
        setMaxScore(missionVersion.getMaxScore());
        setObsolete(missionVersion.getObsolete());
    }
}
